package db

const TableNameWarehouseCard = TablePrefix + "warehouse_card"

type WarehouseCard struct {
	BaseModel
	UID         uint    `gorm:"column:uid;type:int(11);default:0;comment:用户id" json:"uid" form:"uid"`                                 // 用户id
	TypeID      uint    `gorm:"column:type_id;type:int(11);default:0;comment:类型id" json:"type_id" form:"type_id"`                     // 类型id
	TypeCardID  uint    `gorm:"column:type_card_id;type:int(11);default:0;comment:卡牌类型id" json:"type_card_id" form:"type_card_id"`    // 卡牌类型id
	Num         int64   `gorm:"column:num;type:bigint(20);default:0;comment:剩余产值" json:"num" form:"num"`                              // 剩余产值
	Rate        int64   `gorm:"column:rate;type:bigint(20);default:0;comment:产出效率" json:"rate" form:"rate"`                           // 产出效率
	IsAbandon   bool    `gorm:"column:is_abandon;type:tinyint(1);default:0;comment:废弃,不废弃" json:"is_abandon" form:"is_abandon"`       // 废弃,不废弃
	IsUse       bool    `gorm:"column:is_use;type:tinyint(1);default:0;comment:使用,不使用" json:"is_use" form:"is_use"`                   // 使用,不使用
	IsNew       bool    `gorm:"column:is_new;type:tinyint(1);default:1;comment:新卡,no" json:"is_new" form:"is_new"`                    // 新卡,no
	IsFreeze    bool    `gorm:"column:is_freeze;type:tinyint(1);default:0;comment:冻结,no" json:"is_freeze" form:"is_freeze"`           // 冻结,no
	IsChain     int     `gorm:"column:is_chain;type:tinyint(1);default:0;comment:1=上链中2=上链成功3=上链确认中" json:"is_chain" form:"is_chain"` //  0=上链中1=上链成功2=上链确认中
	Hax         *string `gorm:"column:hax;type:varchar(255);comment:交易哈希" json:"hax" form:"hax"`                                      //  交易哈希
	OperationID string  `gorm:"column:operation_id;type:varchar(255);default:'';comment:标识" json:"operation_id" form:"operation_id"`  //  标识
	TokenID     *string `gorm:"column:token_id;type:varchar(255);comment:标识" json:"token_id" form:"token_id"`                         //  token_id
}

func (*WarehouseCard) TableName() string {
	return TableNameWarehouseCard
}

type WarehouseCardHasOneType struct {
	WarehouseCard
	Types    Type                `gorm:"foreignKey:id;references:TypeID" json:"types"`
	TypeCard TypeCardHaseOneType `gorm:"foreignKey:id;references:TypeCardID" json:"typeCard"`
}

type WarehouseCardsHasOneType []WarehouseCardHasOneType

func (a WarehouseCardsHasOneType) Len() int { // 重写 Len() 方法
	return len(a)
}
func (a WarehouseCardsHasOneType) Swap(i, j int) { // 重写 Swap() 方法
	a[i], a[j] = a[j], a[i]
}
func (a WarehouseCardsHasOneType) Less(i, j int) bool { // 重写 Less() 方法， 从大到小排序
	return a[j].TypeCard.Level < a[i].TypeCard.Level
}
